<?php

	$tolerancia = 10;
	$threeshold_padrao = 20;

	/* calcula fim da chamada */
	function calc_fim($item)
	{
		return (! $item['aberta'])? strtotime($item[5]) :
			(strtotime($item[4]) + ($item['frequencia'] * ($item['nPacotes']+$tolerancia))/1000);
	}

	include_once("qvoipm.php"); 
	include_once("pagina.php");
	
	$nome_semana = array("Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado");
	$nome_mes = array("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", 
					 "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro");

	$banco = new QVOIPM();

	$index = new Pagina("Lista de Chamadas");	
	
	$index->adicionarCSS('home.css');
	$index->adicionarJS('mktree.js');
	
	$index->inicio();

	/* Verifica data de inicio e fim para pegar as chamadas */
	$inicio = ($_GET['inicioS'])? strtotime($_GET['inicioS']) : NULL;
	$fim = ($_GET['fimS'])? strtotime($_GET['fimS']) : NULL;
	$inicio = ($_GET['inicio'])? ($_GET['inicio']) : $inicio;
	$fim = ($_GET['fim'])? ($_GET['fim']) : $fim;

	/* tolerancia de fator-R */
	$threeshold = ($_GET['threeshold'])? $_GET['threeshold'] : $threeshold_padrao;

	/* tipo do grafico */
	$tipo = ($_GET['tipo'])? $_GET['tipo'] : "fatorR";

	/* lista ou arvore */
	$lista = ($_GET['lista'])? $_GET['lista'] : 0;

	if ($inicio && $fim)
		$banco->getChamadasFromUntil($inicio, $fim);
	else if ($inicio)
		$banco->getChamadasFrom($inicio);
	else if ($fim)
		$banco->getChamadasUntil($fim);
	else
		$banco->getChamadas();

	/* soma dos tipos de chamada */
	$total = 0;
	$normais = 0;
	$abertas = 0;
	$anormais = 0;

	if ($lista == 0) 
	{
		/* imprime arvore de chamadas */
		$dia = 0;
		$ano = 0;
		$mes = 0;

		echo "\t<div id=exibicao>\n";
		echo "\t\t<a href='index.php?lista=1&threeshold=$threeshold&inicio=$inicio&fim=$fim&tipo=$tipo'>Exibir em forma de lista.</a>\n";
		echo "\t<a href='#' onClick=\"expandTree('tree1'); return false;\">Expandir todos</a>\n";
		echo "\t\t<a href='#' onClick=\"collapseTree('tree1'); return false;\">Colapsar todos</a>\n";		
		echo "\t</div>\n";

		echo "\t<ul class='mktree' id='tree1'>\n";	
		
		while ($result = $banco->getResult())
		{
			$data_inicio = strtotime($result[4]);

			if (! $inicio_real)
				$inicio_real = $data_inicio;
			$fim_real = calc_fim($result);

			if ($dia == 0)
			{
				/* Cria subarvore ano -> mes -> dia */
				echo "\t\t<li>" . date("Y", $data_inicio) ."\n";
				echo "\t\t\t<ul>\n";
				echo "\t\t\t\t<li>" . $nome_mes[date("n", $data_inicio)-1]  . "\n";
				echo "\t\t\t\t\t<ul>\n";
				echo "\t\t\t\t\t\t<li>" . date("d", $data_inicio) . "\n";
				echo "\t\t\t\t\t\t\t<ul>\n";
			}
			else if (date("Y", $data_inicio) > $ano)
			{
				/* novo ano */
				echo "\t\t\t\t\t\t\t</ul>\n";	/* fecha chamadas */
				echo "\t\t\t\t\t\t</li>\n";		/* fecha dia */
				echo "\t\t\t\t\t</ul>\n";		/* fecha dias */
				echo "\t\t\t\t</li>\n";			/* fecha mes */
				echo "\t\t\t</ul>\n";				/* fecha meses */
				echo "\t\t</li>\n";				/* fecha ano */
				echo "\t\t<li>" . date("Y", $data_inicio) ."\n";
				echo "\t\t\t<ul>\n";
				echo "\t\t\t\t<li>" . $nome_mes[date("n", $data_inicio)-1]  . "\n";
				echo "\t\t\t\t\t<ul>\n";
				echo "\t\t\t\t\t\t<li>" . date("d", $data_inicio) . "\n";
				echo "\t\t\t\t\t\t\t<ul>\n";
			}
			else if (date("n", $data_inicio) > $mes)
			{
				/* novo mes */
				echo "\t\t\t\t\t\t\t</ul>\n";	/* fecha chamadas */
				echo "\t\t\t\t\t\t</li>\n";		/* fecha dia */
				echo "\t\t\t\t\t</ul>\n";		/* fecha dias */
				echo "\t\t\t\t</li>\n";			/* fecha mes */			
				echo "\t\t\t\t<li>" . $nome_mes[date("n", $data_inicio)-1]  . "\n";
				echo "\t\t\t\t\t<ul>\n";
				echo "\t\t\t\t\t\t<li>" . date("d", $data_inicio) . "\n";
				echo "\t\t\t\t\t\t\t<ul>\n";
			}
			else if (date("j", $data_inicio) > $dia)
			{
				/* novo dia */
				echo "\t\t\t\t\t\t\t</ul>\n";	/* fecha chamadas */
				echo "\t\t\t\t\t\t</li>\n";		/* fecha dia */
				echo "\t\t\t\t\t\t<li>" . date("d", $data_inicio) . "\n";
				echo "\t\t\t\t\t\t\t<ul>\n";
			}

			/* Imprime dados da chamada */
			echo "\t\t\t\t\t\t\t\t<li>\n";

			/* determina se esta acima ou abaixo do limiar de qualidade */
			$classe = ($result['nPacotes'] == 0)? 'ruim' : 
					(($result['sFatorR']/$result['nPacotes'] > $threeshold)? "bom" : "ruim");
			
			echo "\t\t\t\t\t\t\t\t\t<a class='$classe' href='chamada.php?id=$result[0]'>" . $result[1] . " para " . $result[2];

			if (! $result['aberta'])
			{
				echo ", das " . date("H:i", $data_inicio) . " as " . date("H:i:s", strtotime($result[5])) . "</a>\n";
				$normais++;
			}
			else if ($data_inicio + ($result['frequencia'] * ($result['nPacotes']+$tolerancia))/1000 < time())
			{
				echo " das " . date("H:i:s", $data_inicio) . " e terminada anormalmente as " .
						date("H:i:s",  $data_inicio + ($result['frequencia'] * $result['nPacotes'])/1000). "</a>\n";
				$anormais++;
			}
			else
			{
				echo " iniciada em " . date("H:i", $data_inicio) . "</a>\n";
				$abertas++;
			}

			echo "\t\t\t\t\t\t\t\t</li>\n";

			$total++;
		
			$dia = date("j", $data_inicio);
			$mes = date("n", $data_inicio);
			$ano = date("Y", $data_inicio);
		}
	
		if ($dia != 0)
		{
			echo "\t\t\t\t\t\t\t</ul>\n";	/* fecha chamadas */
			echo "\t\t\t\t\t\t</li>\n";		/* fecha dia */
			echo "\t\t\t\t\t</ul>\n";		/* fecha dias */
			echo "\t\t\t\t</li>\n";			/* fecha mes */
			echo "\t\t\t</ul>\n";				/* fecha meses */
			echo "\t\t</li>\n";				/* fecha ano */
		}	
		echo "\t</ul>\n";
	}
	else
	{
		echo "\t<div id='exibicao'>\n";
		echo "\t\t<a href='index.php?lista=0&threeshold=$threeshold&inicio=$inicio&fim=$fim&tipo=$tipo'>Exibir em forma de árvore.</a>\n";
		echo "\t</div>\n";
		
		echo "\t<div id='chamadas'><table>\n";
		echo "\t\t<tr class='destaque'>\n";
		echo "\t\t\t<td>IP A</td>\n";
		echo "\t\t\t<td>IP B</td>\n";
		echo "\t\t\t<td>Inicio</td>\n";
		echo "\t\t\t<td>Fim</td>\n";
		echo "\t\t\t<td>Estado</td>\n";
		echo "\t\t</tr>\n";
		
		while ($result = $banco->getResult())
		{
				/* determina se esta acima ou abaixo do limiar de qualidade */
				$classe = ($result['nPacotes'] == 0)? 'ruim' : 
					(($result['sFatorR']/$result['nPacotes'] > $threeshold)? "bom" : "ruim");

				if (! $inicio_real)
					$inicio_real = strtotime($result[4]);
				$fim_real = calc_fim($result);

				echo "\t\t<tr>\n";
				echo "\t\t\t<td><a class='$classe' href='chamada.php?id=$result[0]'>" . $result[1] . "</a></td>\n";
				echo "\t\t\t<td><a class='$classe' href='chamada.php?id=$result[0]'>" . $result[2] . "</a></td>\n";
				echo "\t\t\t<td><a class='$classe' href='chamada.php?id=$result[0]'>" . date ("d/n/Y  H:i:s", strtotime($result[4])) . "</a></td>\n";
				if (! $result['aberta'])
				{
					echo "\t\t\t<td><a class='$classe' href='chamada.php?id=$result[0]'>" . 
						date ("d/n/Y  H:i:s", strtotime($result[5])) . "</a></td>\n";
					echo "\t\t\t<td>fechada</td>\n";
					$normais++;
				}
				else
				{
					echo "\t\t\t<td>-</td>\n";
					if (strtotime($result[4]) + ($result['frequencia'] * ($result['nPacotes']+$tolerancia))/1000 < time())
					{
						echo "\t\t\t<td>anormal</td>\n";
						$anormais++;
					}
					else
					{
						echo "\t\t\t<td>aberta</td>\n";	
						$abertas++;
					}
				}				
				echo "\t\t</tr>\n";
				$total++;
		}
		echo "\t</table></div>\n";
	}

	echo "\t<div id='informacoes'>\n";
	if ($total == 0)
		echo "\t\tNenhuma chamada registrada neste intervalo de tempo.\n";
	else
		echo "\t\t<img src='graph_pie.php?normais=$normais&anormais=$anormais&abertas=$abertas' />\n";

	echo "\t</div>\n";
	
	echo "\t<form action='index.php' method='get'>\n";
	echo "\t\tEspecificar intervalo:\n";
	echo "\t\t<input type='hidden' name='lista' value=$lista />\n";
	echo "\t\t<input type='hidden' name='tipo' value=$tipo />\n";
	echo "\t\t<input type='hidden' name='threeshold' value=$threeshold />\n";
	echo "\t\tde <input type='text' name='inicioS'/> a <input type='text' name='fimS'/>" . 
		"<a href='http://www.gnu.org/software/tar/manual/html_node/tar_109.html' title='Formatos de entrada'>*</a>\n";
	echo "\t\t<input id='botao' type='submit' name='ok' value='confirmar'/>\n";
	echo "\t</form>\n";

	echo "\t<div id='grafico'>\n";

	echo "\t\t<ul id='tipos'>\n";
	echo "\t\t\t<li><a href='index.php?lista=$lista&threeshold=$threeshold&inicio=$inicio&fim=$fim&tipo=fatorR'>Fator-R</a></li>\n";
	echo "\t\t\t<li><a href='index.php?lista=$lista&threeshold=$threeshold&inicio=$inicio&fim=$fim&tipo=perda'>Perda</a></li>\n";
	echo "\t\t\t<li><a href='index.php?lista=$lista&threeshold=$threeshold&inicio=$inicio&fim=$fim&tipo=atraso'>Atraso</a></li>\n";
	echo "\t\t\t<li><a href='index.php?lista=$lista&threeshold=$threeshold&inicio=$inicio&fim=$fim&tipo=jitter'>Jitter</a></li>\n";
	echo "\t\t</ul>\n";

	echo "\t\t<img src='graph_chamadas.php?lista=$lista&threeshold=$threeshold&inicio=$inicio_real&fim=$fim_real&tipo=$tipo' usemap='#graphmap'/><br>\n";
	if ($inicio && $fim)
		echo "\t\tde " . date("d/n/Y H:i:s", $inicio) . " a " . date("d/n/Y H:i:s", $fim) . "\n";
	else if ($inicio)
		echo "\t\tdesde " . date("d/n/Y H:i:s", $inicio) . "\n";
	else if ($fim)
		echo "\t\taté " . date("d/n/Y H:i:s", $fim) . "\n";
	else
		echo "\t\ttodas chamadas\n";
	echo "\t</div>\n";

	/* cria image map */
	$marginl = 70;
	$tamanhox = 900 - ($marginl + 30);

	/* calcula precisao */
	$divisoes = 500;

	if ($fim_real - $inicio_real < $divisoes)
		$precisao = 1;
	else if ($fim_real - $inicio_real < $divisoes * 60)
		$precisao = 60;
	else if ($fim_real - $inicio_real < $divisoes * 60*60)
		$precisao = 60*60;
	else if ($fim_real - $inicio_real < $divisoes * 60*60*24)
		$precisao = 60*60*24;
	else if ($fim_real - $inicio_real < $divisoes * 60*60*24*30)
		$precisao = 60*60*24*30;
	else
		$precisao = 60*60*24*30*365;
	
	if ($total > 0)
	{
		$banco->getChamadasFromUntil($inicio_real, $fim_real);
		$t_inicio = $inicio_real;
		$t_fim = $t_inicio + $precisao;
		$divreal = (int)(($fim_real - $inicio_real) / $precisao);
		$xslice = (float)$tamanhox / (float)$divreal;
		$c = 0;

		echo "\t<map name='graphmap'>\n";
		while ($result = $banco->getResult())
		{
			while (!(calc_fim($result) >= $t_inicio && strtotime($result[4]) <= $t_fim) && 
				$c <= $divreal &&
				strtotime($result[4]) > $t_fim)
			{
				$t_inicio = $t_fim;
				$t_fim += $precisao;
				$c++;
			}			

			if ($c > $divreal)
				break;

			if (calc_fim($result) >= $t_inicio && strtotime($result[4]) <= $t_fim)
			{
				echo "\t\t<area shape='rect' coords='";
				echo  ($marginl + (($c-0.5) * $xslice)) . ",20,";
				echo ($marginl + (($c+0.5) * $xslice)) . ",220' ";
				echo "href='index.php?lista=$lista&threeshold=$threeshold&inicio=" . $t_inicio;
				echo "&fim=" . $t_fim . "&tipo=$tipo' />\n";

				$t_inicio = $t_fim;
				$t_fim += $precisao;
				$c++;
			}
		}
		echo "\t</map>\n";
	}

	$index->fim();

?>
